class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        // 1.定义两个哈希表
        int hash1[26] = { 0 }, hash2[26] = { 0 };
        // 先把p字符串的字符放入hash2
        for (auto& ch : p)
            hash2[ch - 'a']++;

        vector<int> ret;

        for (int left = 0, right = 0, cnt = 0; right < s.size(); right++)
        {
            // 2.进窗口
            hash1[s[right] - 'a']++;
            if (hash1[s[right] - 'a'] <= hash2[s[right] - 'a']) cnt++;

            // 3.判断
            if (right - left + 1 > p.size())
            {
                // 4.出窗口
                if (hash1[s[left] - 'a']-- <= hash2[s[left] - 'a']) cnt--;
                left++;
            }
            // 5.更新结果
            if(cnt == p.size())
                ret.push_back(left);
        }
        return ret;
    }
};